package view;

import org.uqbar.arena.actions.MessageSend;
import org.uqbar.arena.layout.ColumnLayout;
import org.uqbar.arena.widgets.Button;
import org.uqbar.arena.widgets.Label;
import org.uqbar.arena.widgets.Panel;
import org.uqbar.arena.widgets.tables.Column;
import org.uqbar.arena.widgets.tables.Table;
import org.uqbar.arena.windows.SimpleWindow;
import org.uqbar.arena.windows.WindowOwner;
import ApplicationModels.AsignacionAppModel;
import ApplicationModels.PlanificarHorariosAppModel;
import Domain.Asignacion;

@SuppressWarnings("serial")
public class PlanificarHorariosWindow extends
		SimpleWindow<PlanificarHorariosAppModel> {

	public PlanificarHorariosWindow(WindowOwner parent,
			PlanificarHorariosAppModel model) {
		super(parent, model);
		// TODO Auto-generated constructor stub
	}

	@Override
	protected void createFormPanel(Panel mainPanel) {
		this.setTitle("PlanificarHorarios");
		mainPanel.setLayout(new ColumnLayout(1));

		new Label(mainPanel).setText("Planificación para el: ");
		new Label(mainPanel)
				.bindValueToProperty("planificacionSeleccionada.fechaAPlanificar");

		this.crearTabla(mainPanel);

	}

	public void crearTabla(Panel mainPanel) {
		Table<Asignacion> tablaAsignaciones = new Table<Asignacion>(mainPanel,
				Asignacion.class);

		tablaAsignaciones.setHeigth(250);
		tablaAsignaciones.setWidth(900);

		tablaAsignaciones.bindItemsToProperty("listadoDeAsignaciones");
		tablaAsignaciones.bindValueToProperty("asignacionSeleccionada");

		this.describeResultsGrid(tablaAsignaciones);

	}

	public void describeResultsGrid(Table<Asignacion> tablaAsignaciones) {
		new Column<Asignacion>(tablaAsignaciones).setTitle("Empleado")
				.bindContentsToProperty("empleado.nombreYApellido").setFixedSize(100);

		for (int i = 0; i < 24; i++) {
			this.crearColumnaEn(tablaAsignaciones, i);
		}

	}

	public void crearColumnaEn(Table<Asignacion> tablaAsignaciones, final int i) {
		Column<Asignacion> col = new Column<Asignacion>(tablaAsignaciones)
				.setTitle(String.valueOf(i));
		col.bindContentsToTransformer(new com.uqbar.commons.collections.Transformer<Asignacion, String>() {

			@Override
			public String transform(Asignacion element) {
				if (evaluarSiContiene(element, i)) {
					return "X";
				} else {
					return "";
				}
			}
		});
	}

	public boolean evaluarSiContiene(Asignacion a, int numero) {
		return numero >= a.getDesde().getHourOfDay()
				&& numero <= a.getHasta().getHourOfDay();
	}

	@Override
	protected void addActions(Panel actionsPanel) {
		new Button(actionsPanel).setCaption("Agregar Asignacion").onClick(
				new MessageSend(this, "agregarAsignacion"));

		new Button(actionsPanel).setCaption("Quitar Asignacion").onClick(
				new MessageSend(this, "quitarAsignacion"));
		
		Button cerrar = new Button(actionsPanel);
		cerrar.setCaption("Cerrar");
		cerrar.onClick(new MessageSend(this, "close"));

	}

	public void agregarAsignacion() {

		this.openSimpleWindow(new CrearAsignacionWindow(this,
				new AsignacionAppModel(this.getModelObject().getPlanificacionSeleccionada(), this.getModelObject().getTienda())));

	}

	public void openSimpleWindow(SimpleWindow<?> simpleWindow) {
		simpleWindow.open();
	}

	public void quitarAsignacion() {

		this.getModelObject().eliminarAsignacion(
				this.getModelObject().getAsignacionSeleccionada());

	}

}
